const app = getApp();
const request = require('../../utils/request');
const auth = require('../../utils/auth');

Page({
  data: {
    loginStatus: false,
    userInfo: null,
    hasUserInfo: false,
    canIUseGetUserProfile: false,
    loginType: 'wx', // 登录类型，wx:微信登录，account:账号登录
    username: '', // 用户名
    password: '', // 密码
    wxLoginCode: '' // 微信登录code
  },
  
  onLoad() {
    try {
      console.log('登录页面加载');
    
      // 判断是否支持getUserProfile
      if (wx.getUserProfile) {
        this.setData({
          canIUseGetUserProfile: true
        });
      }
      
      // 自动填充测试账号
      this.setData({
        username: 'test',
        password: '123456'
      });
      
      // 检查是否已登录
      this.checkLoginStatus();
    } catch (error) {
      console.error('登录页面加载错误:', error);
    }
  },
  
  // 检查登录状态
  checkLoginStatus() {
    try {
      // 使用token检查登录状态
      const token = auth.getToken();
      const userInfo = app.globalData.userInfo;
      
      if (token && userInfo) {
        this.setData({
          loginStatus: true,
          userInfo: userInfo,
          hasUserInfo: true
        });
        
        // 已登录，跳转到首页
        this.navigateToIndex();
      }
    } catch (error) {
      console.error('检查登录状态失败:', error);
    }
  },
  
  // 跳转到首页
  navigateToIndex() {
    console.log('尝试跳转到首页');
    
    // 清除可能存在的定时器
    if (this.data._navigationTimer) {
      clearTimeout(this.data._navigationTimer);
    }
    
    // 检查当前页面，避免重复跳转
    const pages = getCurrentPages();
    const currentPage = pages.length > 0 ? pages[pages.length - 1].route : '';
    if (currentPage === 'pages/index/index') {
      console.log('当前已在首页，无需跳转');
      return;
    }
    
    // 设置标记并使用延迟
    this.setData({
      _navigationTimer: setTimeout(() => {
        console.log('准备跳转到首页，使用switchTab方式');
        wx.switchTab({
          url: '/pages/index/index',
          success: () => {
            console.log('跳转到首页成功');
          },
          fail: (error) => {
            console.error('switchTab跳转失败', error);
            
            // 如果switchTab失败，增加延迟后使用reLaunch
            setTimeout(() => {
              console.log('尝试使用reLaunch方式跳转到首页');
              wx.reLaunch({
                url: '/pages/index/index',
                success: () => {
                  console.log('使用reLaunch跳转到首页成功');
                },
                fail: (err) => {
                  console.error('所有跳转方式都失败:', err);
                  
                  // 显示引导用户手动操作的提示
                  wx.showToast({
                    title: '请点击下方"首页"按钮',
                    icon: 'none',
                    duration: 3000
                  });
                }
              });
            }, 800);
          }
        });
      }, 300)
    });
  },
  
  // 切换登录方式
  switchTab(e) {
    const type = e.currentTarget.dataset.type;
    this.setData({
      loginType: type
    });
  },
  
  // 用户名输入
  onUsernameInput(e) {
    this.setData({
      username: e.detail.value
    });
  },
  
  // 密码输入
  onPasswordInput(e) {
    this.setData({
      password: e.detail.value
    });
  },
  
  // 账号登录
  accountLogin(isAutoLogin = false) {
    const { username, password } = this.data;
    
    // 输入验证
    if (!username) {
      wx.showToast({
        title: '请输入用户名',
        icon: 'none'
      });
      return;
    }
    
    if (!password) {
      wx.showToast({
        title: '请输入密码',
        icon: 'none'
      });
      return;
    }
    
    wx.showLoading({
      title: '登录中...',
      mask: true
    });
    
    // 发送登录请求
    request.post('/mini/user/account/login', {
      username: username,
      password: password
    }).then(res => {
      wx.hideLoading();
      
      if (res.code === 1) {
        // 登录成功，解析返回数据
        const userData = res.data.user; // 用户信息
        const token = res.data.token;   // JWT令牌
        
        console.log('登录成功，处理用户数据和令牌');
        
        // 保存用户信息到全局
        app.globalData.userInfo = userData;
        app.globalData.isLoggedIn = true;
        
        // 存储JWT令牌
        auth.setToken(token);
        
        // 存储用户ID到本地（兼容旧版）
        try {
          wx.setStorageSync('userId', userData.id);
          console.log('成功存储用户ID:', userData.id);
        } catch (error) {
          console.warn('存储用户ID失败:', error);
        }
        
        this.setData({
          loginStatus: true,
          userInfo: userData,
          hasUserInfo: true
        });
        
        // 简化登录成功流程，避免多余的弹窗和延迟
        if (!isAutoLogin) {
          // 只有在手动登录时才显示成功提示
          wx.showToast({
            title: '登录成功',
            icon: 'success',
            duration: 800
          });
        }
        
        // 直接跳转到首页，不使用额外的延迟
        this.navigateToIndex();
      } else {
        // 登录失败，显示错误信息
        wx.showToast({
          title: res.msg || '登录失败',
          icon: 'none',
          duration: 2000
        });
      }
    }).catch(err => {
      console.error('账号登录请求失败:', err);
      wx.hideLoading();
      
      // 显示错误信息，优先使用后台返回的错误消息
      let errorMsg = '网络异常，请稍后再试';
      
      // 检查是否有后台返回的错误信息
      if (err && err.msg) {
        errorMsg = err.msg;
      }
      
      wx.showToast({
        title: errorMsg,
        icon: 'none',
        duration: 2000
      });
    });
  },
  
  // 获取用户信息（新接口）
  getUserProfile() {
    wx.getUserProfile({
      desc: '用于完善会员资料',
      success: (res) => {
        // 将用户信息暂存，后续登录成功后再提交到后端
        const userProfile = res.userInfo;
        
        // 执行登录
        this.doLogin(userProfile);
      },
      fail: (err) => {
        wx.showToast({
          title: '您已取消授权',
          icon: 'none'
        });
      }
    });
  },
  
  // 执行登录操作
  doLogin(userProfile) {
    // 显示加载中
    wx.showLoading({
      title: '登录中...',
      mask: true
    });
    
    // 获取登录凭证
    wx.login({
      success: (loginRes) => {
        if (loginRes.code) {
          // 准备登录数据
          const loginData = {
            code: loginRes.code,
            userInfo: userProfile
          };
          
          // 使用code和用户信息调用后端登录接口
          request.post('/mini/user/login', loginData).then(res => {
            wx.hideLoading();
            
            if (res.code === 1) {
              // 登录成功，解析返回数据
              const userData = res.data.user; // 用户信息
              const token = res.data.token;   // JWT令牌
              
              // 保存用户信息到全局
              app.globalData.userInfo = userData;
              app.globalData.isLoggedIn = true;
              
              // 存储JWT令牌
              auth.setToken(token);
              
              // 存储用户ID到本地（兼容旧版）
              try {
                wx.setStorageSync('userId', userData.id);
                console.log('成功存储用户ID:', userData.id);
              } catch (error) {
                console.warn('存储用户ID失败:', error);
              }
              
              this.setData({
                loginStatus: true,
                userInfo: userData,
                hasUserInfo: true
              });
              
              // 显示登录成功提示
              wx.showToast({
                title: '登录成功',
                icon: 'success',
                duration: 1000
              });
              
              // 跳转到首页，减少延迟时间
              setTimeout(() => {
                this.navigateToIndex();
              }, 800);
            } else {
              // 登录失败，显示错误信息
              wx.showToast({
                title: res.msg || '微信登录失败',
                icon: 'none',
                duration: 2000
              });
            }
          }).catch(err => {
            console.error('微信登录请求失败:', err);
            wx.hideLoading();
            
            // 显示错误信息，优先使用后台返回的错误消息
            let errorMsg = '网络异常，请稍后再试';
            
            // 检查是否有后台返回的错误信息
            if (err && err.msg) {
              errorMsg = err.msg;
            }
            
            wx.showToast({
              title: errorMsg,
              icon: 'none',
              duration: 2000
            });
          });
        } else {
          wx.hideLoading();
          wx.showToast({
            title: '获取登录凭证失败',
            icon: 'none',
            duration: 2000
          });
        }
      },
      fail: (err) => {
        console.error('微信登录失败:', err);
        wx.hideLoading();
        wx.showToast({
          title: '微信登录失败',
          icon: 'none',
          duration: 2000
        });
      }
    });
  }
}) 